package ${basePackage}.generator;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ArrayUtil;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

/**
 * @author ${author}
 */
public class StaticGenerator {
    /**
     * 拷贝文件,Hutool实现，将输入目录完整拷贝到输出目录
     * @param inputPath 输入目录
     * @param outputPath 输出目录
     */
    public static void copyFilesByHutool(String inputPath,String outputPath){
        //文件拷贝,false:不允许覆盖目标目录下的文件
        FileUtil.copy(inputPath,outputPath,false);
    }

    /**
     * 自定义递归算法进行文件的拷贝,手动实现的递归方法
     * @param inputPath 源文件
     * @param outputPath 目标文件
     */
    public static void copyFilesByRecursion(String inputPath,String outputPath){
        File inputFile = new File(inputPath);
        File outFile = new File(outputPath);
        try {
            copyFileByRecursion(inputFile,outFile);
        } catch (IOException e) {
            System.out.println("文件拷贝错误");
            e.printStackTrace();
        }
    }

    /**
     * 利用递归算法实现文件的拷贝,手动实现的递归方法
     * @param inputFile 源文件
     * @param outputFile 目标文件
     */
    private static void copyFileByRecursion(File inputFile, File outputFile) throws IOException {
        if (inputFile.isDirectory()){
            //inputFile为一个目录
            File descFile = new File(outputFile, inputFile.getName());
            //判断descFile是否存在
            if (!descFile.exists()){
                descFile.mkdirs();
            }
            //获取inputFile目录下的所有目录和文件
            File[] files = inputFile.listFiles();
            if (ArrayUtil.isEmpty(files)){
                return;
            }
            for (File file : files) {
                //递归拷贝下一次文件或目录
                copyFileByRecursion(file,descFile);
            }
        }else {
            //inputFile为文件，直接复制到目标目录下
            Path descPath = outputFile.toPath().resolve(inputFile.getName());
            //将 inputFile 的内容复制到 destPath 指定的位置，如果 destPath 指向的文件已经存在，则替换它
            //Files.copy(src,desc)这个方法是将源文件的内容复制到一个目标文件里，这里的desc也是一个文件的路径
            Files.copy(inputFile.toPath(),descPath, StandardCopyOption.REPLACE_EXISTING);
        }
    }
}
